﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Windows.Forms;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Data.SqlClient;

namespace FrbaCommerce
{
    public class Rol
    {
        public int id { get; set; }
        public string nombre { get; set; }
        public Boolean habilitado { get; set; }
        public List<Funcionalidad> Funcionalidades { get; set; }

        public Rol() 
        {
        }
        
        public Rol(String nombre) 
        {
            getDatosPorNombre(nombre);
        }

        public Rol(int id)
        {
            getDatosPorId(id);
        }

        public Rol(string nombre, bool habilitado)
        {
            Guardar(nombre, habilitado);
        }

        public Rol(string nombre, bool habilitado, int id)
        {
            Modificar(nombre, habilitado, id);
        }

        public Rol(int id, bool habilitado)
        {
            Baja(id, habilitado);
        }
        

        private Rol cargarRoles(DataRow fila)
        {
            Rol rol = new Rol();
            rol.id = Convert.ToInt32(fila.ItemArray[0].ToString());
            rol.nombre = fila.ItemArray[1].ToString();
            rol.habilitado = Convert.ToBoolean(fila.ItemArray[2].ToString());
            return rol;
        }
        
        private void cargarRol(DataRow fila)
        {
            this.id = Convert.ToInt32(fila.ItemArray[0].ToString());
            this.nombre = fila.ItemArray[1].ToString();
            this.habilitado = Convert.ToBoolean(fila.ItemArray[2].ToString());
        }

        public void getDatosPorNombre(String nombre)
        {
            string query = "SELECT * from ASDF.Rol WHERE nombre = '" + nombre + "' AND habilitado = 1;";

            ConexionSql conexionSql = new ConexionSql();
            DataSet datos = new DataSet();
            datos = conexionSql.ejecutarConsulta(query);
            this.cargarRol(datos.Tables[0].Rows[0]);
        }

        public void getDatosPorId(int id)
        {
            string query = "SELECT * from ASDF.Rol WHERE habilitado=1 and id = " + id + " ";
            ConexionSql conexionSql = new ConexionSql();
            DataSet datos = new DataSet();
            datos = conexionSql.ejecutarConsulta(query);
            cargarRol(datos.Tables[0].Rows[0]);
        }

        public void Guardar(String nombre, bool habilitado)
        {
            string query = "INSERT INTO ASDF.Rol Values ('" + nombre + "' , " + Convert.ToInt32(habilitado) + " ) ";
            ConexionSql conexionSql = new ConexionSql();
            DataSet datos = new DataSet();
            datos = conexionSql.ejecutarConsulta(query);
        }

        public void Modificar(String nombre, bool habilidato, int id)
        {
            string query = "UPDATE ASDF.Rol SET nombre = '" + nombre + "' , habilitado = " + Convert.ToInt32(habilitado) + " WHERE id = " + id + " ";
            ConexionSql conexionSql = new ConexionSql();
            DataSet datos = new DataSet();
            datos = conexionSql.ejecutarConsulta(query);
        }

        public void Baja(int id, bool habilitado)
        {
            string query = "UPDATE ASDF.Rol SET habilitado = " + Convert.ToInt32(habilitado) + " WHERE id = " + id + " ";
            ConexionSql conexionSql = new ConexionSql();
            DataSet datos = new DataSet();
            datos = conexionSql.ejecutarConsulta(query);
        }

        public List<Rol> BuscarRoles(string nombre)
        {
            List<Rol> roles = new List<Rol>();
            string query = "SELECT * from ASDF.Rol ";
            if (nombre.Length != 0)
            {
                query += "WHERE nombre = '" + nombre + "';";
            }           
            ConexionSql conexionSql = new ConexionSql();
            DataSet datos = new DataSet();
            datos = conexionSql.ejecutarConsulta(query);
            foreach (DataRow fila in datos.Tables[0].Rows)
            {
                roles.Add(cargarRoles(datos.Tables[0].Rows[0]));
            }            
            return roles;
        }

        public void CargarComboRoles(ComboBox cmbRol)
        {
            string query = "SELECT nombre FROM ASDF.Rol ";
            ConexionSql conexionSql = new ConexionSql();
            DataSet datos = new DataSet();
            datos = conexionSql.ejecutarConsulta(query);
            cmbRol.DataSource = null;
            foreach (DataRow dataRow in datos.Tables[0].Rows)
            {
                cmbRol.Items.Add(dataRow[0]);
            }    
        
        }

    }
}
